home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 1.toast / What's New? / Development Kits / Mac OS / USB DDK 1.4.6f4 / Examples / USBEnetSample / ShimEnetHAL.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-08-23  |  5.1 KB  |  221 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        ShimEnetHAL.c
  3.  
  4.     Contains:    xxx put contents here xxx
  5.  
  6.     Version:    xxx put version here xxx
  7.  
  8.     Copyright:    © 1998-1999 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     File Ownership:
  11.  
  12.         DRI:                xxx put dri here xxx
  13.  
  14.         Other Contact:        xxx put other contact here xxx
  15.  
  16.         Technology:            xxx put technology here xxx
  17.  
  18. */
  19.  
  20. #include    <Errors.h>
  21.  
  22. #include    "USBEnet.h"
  23. #include    "USBEnetVersion.h"
  24. #include    "ShimEnetHAL.h"
  25. #include    "USBEnetDriver.h"
  26.  
  27. /************************************************************************************/
  28. //
  29. //    EnetHAL_Entry
  30. //
  31. //    This is the main driver entry point.
  32. //
  33. /************************************************************************************/
  34.  
  35. OSErr EnetHAL_Entry(UInt16 HdwSelector, USBEnetPtr enet, UInt32 RefCon)
  36. {
  37. #pragma unused (RefCon)
  38.     OSErr    err = noErr;
  39.     UInt16    PFilter;
  40.     
  41.     switch (HdwSelector)
  42.         {
  43.             case EnetHAL_RegisterPorts:
  44.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - RegisterPorts");
  45.                 
  46.                 // nothing for the moment - should never get here
  47.                 enet->ioResult = err;
  48.                 break;
  49.                 
  50.             case EnetHAL_Open:
  51.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - Open");
  52.                 
  53.                 // only do the open stuff once
  54.                 if (gGlobals->openSession == false)
  55.                      err = HAL_DoOpen(enet);
  56.                 
  57.                 break;
  58.                 
  59.             case EnetHAL_Close:
  60.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - Close");
  61.                 
  62.                 // only do the close stuff once
  63.                 if (gGlobals->openSession == true)
  64.                     err = HAL_DoClose(enet);
  65.                     
  66.                 break;
  67.                 
  68.             case EnetHAL_Start:
  69.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - Start");
  70.                 
  71.                 USBSetisr(enet->ioCompletion, enet->ioMisc);
  72.                 USBStartupRead();
  73.                 enet->ioResult = err;
  74.                 break;
  75.                 
  76.             case EnetHAL_Stop:
  77.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - Stop");
  78.                 
  79.                 USBStopReadPolling();
  80.                 enet->ioResult = err;
  81.                 break;
  82.                 
  83.             case EnetHAL_Read:
  84.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - Read");
  85.                 
  86.                 enet->ioActCount = USBReadData(enet->ioBuffer, enet->ioReqCount);
  87.                 if (enet->ioActCount == 0)
  88.                     enet->ioResult = readErr;
  89.                 break;
  90.                 
  91.             case EnetHAL_Write:
  92.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - Write");
  93.                 
  94.                 err = USBEnetWrite(enet->ioReqCount, enet->ioBuffer);    
  95.                 enet->ioResult = err;
  96.                 break;
  97.                 
  98.             case EnetHAL_GetMACAddress:
  99.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - GetMACAddress");
  100.                 
  101.                 USBGetAddress(&enet->ioActCount, enet->ioBuffer);
  102.                 enet->ioResult = err;
  103.                 break;
  104.                 
  105.             case EnetHAL_SetMACAddress:
  106.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - SetMACAddress");
  107.                 
  108.                 err = USBSetAddress(enet->ioReqCount, enet->ioBuffer);
  109.                 enet->ioResult = err;
  110.                 break;
  111.                 
  112.             case EnetHAL_SetMulticastFilters:
  113.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - SetMulticastFilters");
  114.                 
  115.                 if (enet->ioBuffer)
  116.                 {
  117.                     err = USBSetMulticastFilters(enet->ioReqCount, (EnetAddressListPtr)enet->ioBuffer);
  118.                     enet->ioResult = err;
  119.                     if (err ==noErr)
  120.                     {
  121.                         PFilter = (kType_Multicast + kType_Broadcast + kType_Directed);
  122.                         err = USBSetPacketFilter(&PFilter);
  123.                         enet->ioResult = err;
  124.                     }
  125.                 } else {
  126.                     PFilter = kType_Promiscuous;
  127.                     err = USBSetPacketFilter(&PFilter);
  128.                     enet->ioResult = err;
  129.                 }
  130.                 break;
  131.                 
  132.             case EnetHAL_Status:
  133.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - Status");
  134.                 
  135.                 err = HAL_DoStatus(enet);
  136.                 enet->ioResult = err;
  137.                 break;
  138.                 
  139.             default:
  140.                 TraceMessage(0, kDrvName"- Entering EnetHAL_Entry - Unknown selector");
  141.                 
  142.                 err = -1;                // unknown selector (for now)
  143.                 enet->ioResult = err;
  144.                 break;
  145.         }
  146.     
  147.     return err;
  148. }
  149.  
  150. /************************************************************************************/
  151. //
  152. //    HAL_DoOpen
  153. //
  154. //    Process an OpenDriver request to the stub drivers
  155. //
  156. /************************************************************************************/
  157.  
  158. OSErr HAL_DoOpen(USBEnetPtr enet)
  159. {
  160. #pragma unused (enet)
  161.  
  162.     UInt16    PFilter;
  163.     
  164.     TraceMessage(0, kDrvName"- Entering HAL_DoOpen");
  165.     
  166.     // only allow one open session
  167.     
  168.     if (gGlobals->openSession)
  169.     {
  170.         enet->ioResult = openErr;
  171.         return openErr;
  172.     }
  173.         
  174.     // we now have an open session    
  175.     gGlobals->openSession = true;    
  176.     
  177.     // set the default packet filter
  178.     PFilter = (kType_Multicast & kType_Broadcast & kType_Directed);
  179.     USBSetPacketFilter(&PFilter);
  180.     
  181.     return noErr;
  182. }
  183.  
  184. /************************************************************************************/
  185. //
  186. //    HAL_DoClose
  187. //
  188. //    Process a CloseDriver request to the stub drivers
  189. //
  190. /************************************************************************************/
  191.  
  192. OSErr HAL_DoClose(USBEnetPtr enet)
  193. {
  194. #pragma unused (enet)
  195.  
  196.     TraceMessage(0, kDrvName"- Entering HAL_DoClose");
  197.                     
  198.     // we no longer have an open session        
  199.     gGlobals->openSession = false;
  200.  
  201.     enet->ioResult = noErr;
  202.     return noErr;
  203. }
  204.  
  205. /************************************************************************************/
  206. //
  207. //    HAL_DoStatus
  208. //
  209. //    Get Ethernet hardware status.
  210. //
  211. /************************************************************************************/
  212.  
  213. OSErr HAL_DoStatus(USBEnetPtr enet)
  214. {
  215. #pragma unused (enet)
  216.  
  217.     TraceMessage(0,kDrvName"- Entering HAL_DoStatus");
  218.     
  219.  
  220.     return noErr;
  221. }